package com.code;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

/**
 * 代码生成器
 */
public class Code {
    public static void main(String[] args) {
        //构建一个代码生成器对象
        AutoGenerator mpg = new AutoGenerator();

        //配置策略

        //1.全局配置
        GlobalConfig config = new GlobalConfig();//注意：是mybatis，generator下的
        //获取当前系统目录
        String property = System.getProperty("user.dir");//表示当前的项目路径
        System.out.println(property.toString());
        //代码生成的目录
        config.setOutputDir(property + "/src/main/java");
        //生成作者
        config.setAuthor("张伟伟");
        //是否打开资源管理器,类似于生成后是否帮你打开文件夹的那种，false表示不打开
        config.setOpen(false);
        //是否覆盖
        config.setFileOverride(false);
        //用正则去除Service的I前缀
        config.setServiceName("%sService");
        //ID 设成默认状态
        config.setIdType(IdType.ID_WORKER);
        //设置日期类型
        config.setDateType(DateType.ONLY_DATE);
        //自动配置Swagger2文档
        config.setSwagger2(true);
        //把全局配置放到生成器里面
        mpg.setGlobalConfig(config);


        //2.设置数据源
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        //数据库链接地址
        dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/jt?userUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai");
        //数据库驱动
        dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
        //数据库user
        dataSourceConfig.setUsername("root");
        //数据库密码
        dataSourceConfig.setPassword("root");
        //数据库的类型
        dataSourceConfig.setDbType(DbType.MYSQL);
        mpg.setDataSource(dataSourceConfig);



        //3.配置所需要生成的包
        PackageConfig packageConfig = new PackageConfig();
        //设置模块名字
        packageConfig.setModuleName("code");
        //设置常见的类放在什么包下
        packageConfig.setParent("com");
        //实体类
        packageConfig.setEntity("pojo");
        //mapper层
        packageConfig.setMapper("mapper");
        //service层
        packageConfig.setService("service");
        //controller层
        packageConfig.setController("controller");
        mpg.setPackageInfo(packageConfig);


        //4.策略配置
        StrategyConfig strategyConfig = new StrategyConfig();
        //映射数据库里面的表名,这是关键位置，需要自动生成哪一张表就把对应的表放进去就OK
        strategyConfig.setInclude("demo_user");
        //设置包的命名规则   underline  _下划线   camel驼峰命名
        strategyConfig.setNaming(NamingStrategy.underline_to_camel);
        //设置数据库字段策略
        strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);
        //是否使用lombok开启注解
        strategyConfig.setEntityLombokModel(true);
        //逻辑删除
        strategyConfig.setLogicDeleteFieldName("deleted");
        //如果用到逻辑删除，就会涉及到自动填充
        //自动填充配置
       /* TableFill gengxin = new TableFill("这里数据库里面逻辑删除的字段名", FieldFill.INSERT);//创建时间执行 FieldFill.INSERT操作
        TableFill xiugai = new TableFill("这里数据库里面逻辑删除的字段名", FieldFill.INSERT_UPDATE);//修改时间执行 FieldFill.INSERT_UPDATE操作
        ArrayList<TableFill> tableFills = new ArrayList<>();
        tableFills.add(gengxin);
        tableFills.add(xiugai);
        strategyConfig.setTableFillList(tableFills);
        mpg.setStrategy(strategyConfig);*/
        //乐观锁配置
        strategyConfig.setVersionFieldName("version");
        strategyConfig.setRestControllerStyle(true);//开启驼峰命名格式
        strategyConfig.setControllerMappingHyphenStyle(true);//访问地址可以有下划线命名//  localhost:8080/hello_id_2
        mpg.setStrategy(strategyConfig);
        mpg.execute();//执行代码构造器

    }
}
